use std::io::Error;
use tracing::Level;

fn main() {
    println!("Hello, world!");


    // 在项目根目录下创建一个日志存放文件
    let log_file = std::fs::File::create("log.txt").unwrap();

    /// 推荐使用这一方式
    // 开始配置一个 `fmt` subscriber
    let subscriber = tracing_subscriber::fmt()
        // 使用更紧凑、更简短的日志格式
        .compact()
        // 显示源代码文件路径
        .with_file(true)
        // 写入到文件
        .with_writer(log_file)
        // 显示源代码行号
        .with_line_number(true)
        // 显示记录事件的线程 ID
        .with_thread_ids(true)
        // 不显示事件的目标（模块路径）
        .with_target(false)
        // 所有级别高于 TRACE 的 spans 事件（例如，debug、info、warn 等）都将写入 stdout
        .with_max_level(Level::TRACE)
        // 结束配置并创建 subscriber
        .finish();
    // 使用该订阅服务器处理在此时间点之后发出的跟踪
    // 在程序的剩余时间里，此订阅者将在所有线程中用作默认值，类似于记录器在 log crate 中的工作方式
    tracing::subscriber::set_global_default(subscriber)
        .expect("setting default subscriber failed");


    // 记录一些事件
    tracing::info!("this is an info event");
    tracing::debug!("this is a debug event");
    tracing::error!("this is an error event");
    tracing::trace!("this is a trace event");
    tracing::warn!("this is a warn event");
}
